 package analyzer;

import java.util.LinkedList;

import pokemon.Pokemon;

public abstract class OrganAnalyzer {
	public static final String NEGATIVE_RES = "Вам слід звернути увагу на деякі аспекти роботи органу. Скористайтесь функцією"
			+ " виведення повного звіту роботи органу.";
	public static final String POSITIVE_RES = "У Вас все чудово з заданим органом. Так тримати!";
	public static final String PERFECT = "Орган працює чудово! ";
	public static final String VERY_GOOD = "Орган у дуже гарному стані! ";
	public static final String NORMAL = "Орган у нормі! ";
	public static final String ATTENTION = "На орган слід звернути увагу, можуть бути серйозні проблеми! ";
	public static final String AWFUL = "Орган у дуже поганому стані! Необхідне термінове лікування! ";
	public static final String NO_BRAIN = "Нема мозку(( ";

	public abstract Consultation work(Pokemon pokemon);

	/**
	 * @param characteristics
	 * @return
	 */
	protected String countAdvice(LinkedList<Byte> characteristics) {
		int sum = 0;
		int amount = 0;
		boolean neg = false;
		for (Byte characteristic : characteristics) {
			sum += characteristic;
			if (characteristic < 0) {
				neg = true;
			}
		}
		amount = characteristics.size();
        return analyzeAmount(sum, amount, neg);
	}

    private String analyzeAmount(int sum, int amount, boolean neg) {
        String resultString = null;
        if (amount > 0) {
            int result = sum / amount;
            resultString = "Результат роботи органу = " + result + ". ";
            if (result >= 80) {
                resultString += PERFECT;
            } else if (result >= 20) {
                resultString += VERY_GOOD;
            } else if (result >= -10) {
                resultString += NORMAL;
            } else if (result > -80) {
                resultString += ATTENTION;
            } else {
                resultString += AWFUL;
            }
            if (neg) {
                resultString += NEGATIVE_RES;
            } else {
                resultString += POSITIVE_RES;
            }
        }
        return resultString;
    }
}
